package net.yzjlb.sai.mrp;

import java.util.ArrayList;
import java.io.File;
import net.yzjlb.sai.mrp.FileItem;

public class MrpConfig {
    //输出路径
    public String path = "";
    String Magic = "MRPG"; // [0:4]     固定标识'MRPG'
    int FileStart;  // [4:8]     文件头的长度+文件列表的长度-8
    int MrpTotalLen;  // [8:12]    mrp文件的总长度
    int MRPHeaderSize = 240;  // [12:16]   文件头的长度，通常是240，如果有额外数据则需要加上额外数据的长度
    public String FileName = "cstqb.mrp"; // [16:28]   GB2312编码带'\0'
    public String DisplayName = "sai_mpc"; // [28:52]   GB2312编码带'\0'
    public String AuthStr = "fuck"; // [52:68]   编译器的授权字符串的第2、4、8、9、11、12、1、7、6位字符重新组合的一个字符串
    public int Appid = 0; // [68:72]
    public int Version = 1; // [72:76]
    public int Flag = 3; // [76:80]   第0位是显示标志， 1-2位是cpu性能要求，所以cpu取值范围是0-3只对展讯有效， 第3位是否是shell启动的标志，0表示start启动，1表示shell启动
    public int BuilderVersion = 10002; // [80:84]   应该是编译器的版本，从几个mrpbuilder看都是10002
    int Crc32; // [84:88]   整个文件计算crc后写回，计算时此字段的值为0
    public String Vendor = "sky"; // [88:128]  GB2312编码带'\0' 供应商
    public String Desc = ""; // [128:192] GB2312编码带'\0'
    public int AppidBE = 0; // [192:196] 大端appid
    public int VersionBE = 1; // [196:200] 大端version
    public int Reserve2; // [200:204] 保留字段
    public int ScreenWidth = 240; // [204:206] 在反编译的mrpbuilder中能看到有屏幕信息的字段，但是在斯凯提供的文档中并没有说明
    public int ScreenHeight = 320; // [206:208]
    public byte Plat = 1; // [208:209] mtk/mstar填1，spr填2，其它填0
    byte[] Reserve3 = new byte[31]; // [209:240]

    //文件列表
    public ArrayList<FileItem> list_file = new ArrayList<FileItem>();

    //设置输出路径
    public MrpConfig setOutFile(String file) {
        path = file;
        return this;
    }

    public MrpConfig setDisplayName(String name) {
        DisplayName = name;
        return this;
    }

    //添加文件
    public MrpConfig addFile(File file, String name) {
        list_file.add(new FileItem(file.getPath(), name));
        return this;
    }

    public MrpConfig addFile(String path) {
        addFile(new File(path), FileUtils.getName(path));
        return this;
    }

    //设置应用id
    public MrpConfig setAppid(int id) {
        Appid = id;
        return this;
    }

    //设置应用版本
    public MrpConfig setVersion(int ver) {
        VersionBE = ver;
        return this;
    }

    //设置供应商
    public MrpConfig setVendor(String user) {
        Vendor = user;
        return this;
    }

    //设置简介
    public MrpConfig setDesc(String desc) {
        Desc = desc;
        return this;
    }

    //设置标志
    public MrpConfig setFlag(int show, int cpu, int shell) {
        return this;
    }

    //设置屏幕宽高
    public MrpConfig setScreen(int width, int height) {
        ScreenWidth = width;
        ScreenHeight = height;
        return this;
    }

    //设置平台
    public MrpConfig setPlat(Plat plat) {
        switch (plat) {
        case NONE:
            this.Plat = 0;
            break;
        case MTK:
            this.Plat = 1;
            break;
        case SPR:
            this.Plat = 2;
            break;
        }
        return this;
    }

    //平台
    public enum Plat {
        NONE, MTK, SPR
    }
}
